package com.big.oss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.big.common.utils.UUIDGenerator;
import com.big.oss.service.FileService;
import com.big.oss.utils.ConstantOssPropertiesUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.jni.Global;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

@Service
@Slf4j
public class FileServiceImpl implements FileService {


    @Override
    public String upload(MultipartFile file) {
        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = ConstantOssPropertiesUtils.EDNPOINT;
        String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantOssPropertiesUtils.SECRECT;
        String bucketName = ConstantOssPropertiesUtils.BUCKET;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 上传文件流。
            InputStream inputStream = file.getInputStream();
            String fileName = file.getOriginalFilename();
            //生成随机唯一值，使用uuid，添加到文件名称里面
//            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            fileName = UUIDGenerator.getStringUUIDInOrderId() + fileName;

            //按照当前日期，创建文件夹，上传到创建文件夹里面
            //  2021/02/02/01.jpg
            String timeUrl = new DateTime().toString("yyyy/MM/dd");
            fileName = timeUrl+"/"+fileName;

            //调用方法实现上传
            // 1.jpg    /a/b/1.jpg
            ossClient.putObject(bucketName, fileName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //上传之后文件路径
           // https://yygh-atguigu.oss-cn-beijing.aliyuncs.com/01.jpg
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            //返回
            return url;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public List<String> uploads(MultipartFile[] files) {
        List<String> urls= new ArrayList<>();
        for (MultipartFile file : files) {    //循环保存文件
            // Endpoint以上海为例，其它Region请按实际情况填写。
            String endpoint = ConstantOssPropertiesUtils.EDNPOINT;
            String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
            String accessKeySecret = ConstantOssPropertiesUtils.SECRECT;
            String bucketName = ConstantOssPropertiesUtils.BUCKET;
            try {
                // 创建OSSClient实例。
                OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
                // 上传文件流。
                InputStream inputStream = file.getInputStream();
                String fileName = file.getOriginalFilename();
                //生成随机唯一值，使用uuid，添加到文件名称里面
//            String uuid = UUID.randomUUID().toString().replaceAll("-","");
                fileName = UUIDGenerator.getStringUUIDInOrderId() + fileName;

                //按照当前日期，创建文件夹，上传到创建文件夹里面
                //  2021/02/02/01.jpg
                String timeUrl = new DateTime().toString("yyyy/MM/dd");
                fileName = timeUrl + "/" + fileName;

                //调用方法实现上传
                // 1.jpg    /a/b/1.jpg
                ossClient.putObject(bucketName, fileName, inputStream);
                // 关闭OSSClient。
                ossClient.shutdown();
                //上传之后文件路径
                // https://yygh-atguigu.oss-cn-beijing.aliyuncs.com/01.jpg
                String url = "https://" + bucketName + "." + endpoint + "/" + fileName;
                //返回
                urls.add(url);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
        return urls ;
    }

    @Override
    public boolean deleteFile(Integer bucketCode,String objectName) {
        String endpoint = ConstantOssPropertiesUtils.EDNPOINT;
        String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantOssPropertiesUtils.SECRECT;
        String bucketName=null;
        switch (bucketCode){
            case 1:
                 bucketName= ConstantOssPropertiesUtils.BUCKET;
            break;
            case 2:
                 bucketName = ConstantOssPropertiesUtils.BUCKETPICTURES;
            break;
        }
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 判断当前文件url 是否存在
        boolean exist = ossClient.doesObjectExist(bucketName, objectName);
        if (!exist) {
            log.error("文件不存在,filePath：{}，{}", objectName, ossClient.doesObjectExist(bucketName, objectName));
            return false;
        } else {
            // 删除文件。
            ossClient.deleteObject(bucketName, objectName);
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    return true;
    }

    @Override
    public String uploadPictures(MultipartFile file) {
        // Endpoint以上海为例，其它Region请按实际情况填写。
        String endpoint = ConstantOssPropertiesUtils.EDNPOINT;
        String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantOssPropertiesUtils.SECRECT;
        String bucketName = ConstantOssPropertiesUtils.BUCKETPICTURES;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 上传文件流。
            InputStream inputStream = file.getInputStream();
            String fileName = file.getOriginalFilename();
            //生成随机唯一值，使用uuid，添加到文件名称里面
//            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            fileName = UUIDGenerator.getStringUUIDInOrderId() + fileName;
            //按照当前日期，创建文件夹，上传到创建文件夹里面
            //  2021/02/02/01.jpg
            String timeUrl = new DateTime().toString("yyyy/MM/dd");
            fileName = timeUrl+"/"+fileName;
            //调用方法实现上传
            // 1.jpg    /a/b/1.jpg
            ossClient.putObject(bucketName, fileName, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            //上传之后文件路径
            // https://yygh-atguigu.oss-cn-beijing.aliyuncs.com/01.jpg
            String url = "https://"+bucketName+"/"+fileName;
            //返回
            return url;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}
